/*******************************************************************************
 * Copyright (c) 2010, 2010 Xbeam Project and ChenZhiKong.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License. 
 *******************************************************************************/
package org.bellusoft.xbeam.framework;

import java.io.File;
import java.io.InputStream;
import org.bellusoft.xbeam.contract.concurrent.ThreadSafe;
import org.bellusoft.xbeam.framework.XbeamConstants.AutoStartSetting;

/**
 * persist bundle information need persist 
 *
 */
@ThreadSafe
interface BundleStorage {
	
	public long getBundleId();
	
	public String getLocation(); 

	public long getLastModifyTime() ; 
	
	public int getStartLevel() ; 
	
	public int getState() ; 
	
	public AutoStartSetting getStartSetting() ;  
	
	public File getDataFile(String fileName) ; 
	
	public void begin() ; 
	
	public void commit() ; 
	
	public void rollback();

	public Transaction newTranscation() ; 
	
	interface Transaction{
		public void begin();
		public void commit();
		public void rollback();
		public void setStartSetting(AutoStartSetting setting);
		public void setStartLevel(int startLevel); 
		public Module update(InputStream stream);
	}
	
	
}
